The present invention relates generally to 3D animated content, and more particularly, to a system and method for reducing animation data for the 3D animated content.
With the convergence of various media platforms, it is becoming increasingly common for companies to cash in on a successful product on one platform by developing a version of the product for another platform. For instance, a company with a successful video game may wish to make a three-dimensional (3D) movie featuring the characters used in the video game for distribution as a television series.
Due to the different requirements and incompatible nature of the various delivery platforms, it is usually necessary to completely redo much of the artwork for the new medium. For instance, a 1000-polygon model of a 3D object created for the video game version may not be usable for the television version of the product. One reason for this may be due to incompatible data formats. The 3D model used for the video game version may not be readable by the software used to create and animate a television version.
Redevelopment for the new medium may also be required due to incompatible resolutions. A 1000-polygon model that was developed and optimized for a video game may be unacceptably chunky and low-resolution for its television version.
A third reason for the redevelopment of 3D models and artwork might be incompatible animation. The preset xe2x80x9cmovesxe2x80x9d used for a video game may not be useable for the television version where pre-scripted, fully animated character movement is required.
Redevelopment of 3D models and artwork might also be required due to the incompatibility of the 3D modeling and animation tools used for different media. Although modern computers provide effective tools for producing 3D animated content for various media platforms, the programming, modeling, animation and publishing tools used for PC, Internet and television production are frequently incompatible with each other. Thus, multiple sets of development software packages have to be purchased with the attendant issues of cost and difficulty of converting data between the various platforms.
The combination of problems listed above has meant that in general, it is possible to reuse as little as 10% of the assets of a 3D content when developing a version of that content for a different platform.
Problems also arise when creating animated content for distribution to different target machines within the same medium due to their different performance capabilities. For instance, highest-end PCs are capable of rendering high-quality graphics while lower-end PCs are not be capable of rendering such high graphics quality. Because the target machine on which a 3D content will ultimately be rendered is rarely known, two strategies have been utilized to address this issue. One of the strategies is to build the 3D content to have adequate performance on the lowest-end PC to ensure that the 3D content is capable of being played by all types of PCs. With this strategy, the 3D content will perform well on low-end PCs, but the design of the graphics will not meet the expectations of high-end PC owners.
A second strategy is to build the 3D content to perform adequately on mid- to high-end PCs. In this case, the mid- to high-end PC owners will be satisfied with copious high-quality graphics, but a large fraction of the market with low-end PCs may be unable to play the 3D content.
In addition to the above, the creation of 3D animated content using conventional systems and methods is a painstaking and difficult process. For example, any changes made to a 3D object appearing in one scene of a 3D animated content must be made in all the scenes in which the character appears in order for the change to be reflected in those scenes. Furthermore, because animation data is scene specific, animation data created for one particular scene is not shared among the other scenes. Thus, pieces of animation data created for a first scene must be reiterated and stored for a second scene in order for that data to be used by the second scene.
Furthermore, the streaming of 3D animated content over the Internet using conventional systems and methods for real-time playback is fraught with difficulties. One approach used in the prior art for streaming data over the Internet include unlimited read-ahead methods where data is read ahead of the playback position, and attempt is made to pre-fetch as much data as possible. However, this approach is limited in use for multipath movies that have many plot alternatives, or paths, that are influenced by a user""s interaction with the movie. Data for a multipath movie may be pre-fetched only up to the point when a user interaction is required. Data beyond this point may not be pre-fetched because it is not possible to predict what scene will be played next, and thus, what data is going to be required next.
Another approach used in the prior art for streaming Internet data is to use a just-in-time approach where data is received just in time to be played. However, this technique falls victim to the vagaries of the Internet. Data rates available for delivering 3D animated content are often inconsistent in nature. The data rate may average 2 Kbps, but there may be times when data is being received at 3 Kbps or no data is being received at all. The failure of the required data to be arrived in time causes pauses in the playback of the animated content.
Accordingly, there is a need for a 3D animation tool that will allow the creation of 3D animated content for different media without engaging in separate development processes. Such tool should allow 3D models and artwork created for one medium to be reused in a different medium. Such a tool should also allow the creation of scalable content for allowing the display of one type of graphics for one kind of target machine and a different type of graphics for a different kind of target machine.
There is also a need for a 3D animation tool that will facilitate the replacement and modifications of 3D objects, as well as allow the re-use of frequently occurring pieces of animation data among the scenes of a movie. Furthermore, there is a need for a system and method for facilitating the streaming of 3D animated content over the Internet for real-time playback. Such system and method should not only provide a streaming technique for multipath movies, but also provide for animation data reduction techniques for reducing the amount of data to be delivered over the Internet.
The present invention addresses and alleviates the above-mentioned deficiencies associated with the prior art. More particularly, the present invention facilitates the production, processing, and Internet distribution of 3D animated content.
In accordance with one aspect of the invention, animation data associated with each 3D object of the animated content is reduced to facilitate the streaming of the data over the Internet. The 3D object is composed of a hierarchy of nodes where each node is associated with animation data stored in a series of source keyframes. The system and method according to this aspect of the invention reduces the number of source keyframes by computing a threshold value for a particular type of animation. The computation of the threshold value differs based on whether the animation is rotation animation or position/scaling animation. The threshold value indicates an amount of deviation allowed in the animation created with the reduced number of keyframes when compared to the original animation.
In creating the reduced number of keyframes, a first keyframe is selected from the series of source keyframes and stored into a keyframe array. The stored keyframes in the keyframe array are interpolated, and compared to the interpolated values created from the interpolation of the original source keyframes. If the interpolated values of the reduced keyframes in the keyframe array differ from the interpolated values of the original source keyframes by more than the threshold value, the deviation is more than what has been allowed. In this case, more keyframes are added to the keyframe array to make the animation created from the reduced keyframes to more closely conform to the original animation.